<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //   第一次循环返回的结果回传给下一次循环中方法的第一个参数，
      //   也就是说、第二次循环方法中prev的值，是第一次循环方法返回的结果
      //   let arr = [1, 2, 3, 4, 5];
      //   //   前一个值、当前项、项目的索引和数组对象
      //   const value = arr.reduce((prev, cur, i, o) => {
      //     console.log(prev, cur)
      //     return prev + cur;
      //   });
      //   console.log(value)

      //   var arr = [{ x: 1 }, { x: 2 }, { x: 3 }];
      //   const value = arr.reduce((prev, cur, i) => {
      //     console.log(prev)
      //     return prev + cur.x
      //   })
      //   console.log(value)

      // var arr = [
      // [0, 1],
      // [2, 3],
      // [4, 5],
      // ];
      // const value = arr.reduce((prev, cur) => {
      //     console.log(prev)
      //     return prev.concat(cur)
      // })
      // console.log(value)

      // var arr = ["a", "b", "a", "c", "c", "c"];
      // const value = arr.reduce((prev, cur, i) => {
      //     if (cur in prev) {
      //         prev[cur]++
      //     } else {
      //         prev[cur] = 1
      //     }
      //     console.log(prev, i)
      //     return prev
      // }, {})
      // console.log(value)

      function add1(str) {
        return "1" + str;
      }
      function add2(str) {
        return "2" + str;
      }
      function add3(str) {
        return "3" + str;
      }

      function compose(...funcs) {
        return function (args) {
          for (let i = funcs.length - 1; i >= 0; i--) {
            args = funcs[i](args);
          }
          return args;
        };
      }
      console.log(compose(add1, add2, add3)('ww'))

      const value = [add1, add2, add3].reduce((prev, cur, i) => {
        console.log(cur, i+1, prev)
        return (...args) => {
            console.log(prev)
            return prev(cur(...args))
        }
      })
      console.log(value('vv'))
    </script>
  </body>
</html>
